#ifndef __edaHCMoveExpl_h__
#define __edaHCMoveExpl_h__

#include "edaMoveExpl.h"
#include "edaMoveGen.h"
#include "edaMoveSelect.h"
#include "edaDefine.h"

class edaHCMoveExpl : public edaMoveExpl
{
  public:
    edaHCMoveExpl() {}
    edaHCMoveExpl(const edaMoveGen *_moveNext, const edaMoveSelect *_moveSelect);
    edaHCMoveExpl(const edaHCMoveExpl &_moveExpl);
    ~edaHCMoveExpl();

    edaMoveExpl* clone() const;
    /**
     * Run the explorer
     * 
     * \param oldSolution The current solution
     * \param newSolution The new solution
     */
    void explore(const edaMove *move,
        edaSolution &oldSolution,
        edaSolution &newSolution);
    virtual void Serialize(edaBuffer &buf, bool pack);

    setClassID(_SYSCLASSID_ + _CLSID_EDAHCMOVEEXPL_);

  private:
    edaMoveGen *moveNext;
    edaMoveSelect *moveSelect;
};

#endif
